﻿using EXT;
using System;
using System.Linq;
using System.Data;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Data.SqlTypes;
using DevExpress.Utils;
using System.Drawing;
using System.Runtime.InteropServices;

namespace BanHangCshap.DanhMuc.gkhtdl63
{
    public partial class frmDuan : Form
    {
        public frmDuan()
        {
            InitializeComponent();
        }

        private Class.gkhtdl63.BLL.DuanBLL xgDuanaBLL = new BanHangCshap.Class.gkhtdl63.BLL.DuanBLL();
        private Class.gkhtdl63.BLL.ChitietDuanBLL xgChitietDuanBLL = new BanHangCshap.Class.gkhtdl63.BLL.ChitietDuanBLL();

        /// <summary>
        /// Biến kiểm tra xem là đang thêm hay sữa
        /// </summary>
        private bool xgIsAOrE = true;

        /// <summary>
        /// Id dự án đang thao tác
        /// </summary>
        private long xgIdDuan = 0;

        private DataTable xgDTQCBoSanpham = new DataTable();

        private string xgMa_NhanvienLap = "";

        /// <summary>
        /// Tạo khung thêm dữ liệu chi tiết dự án
        /// </summary>
        private void LoadChitietDuanNull()
        {
            DataTable xlDTChitietDuan = xgChitietDuanBLL.ChitietDuan_LayTheoId_Duan(-1);
            if (xlDTChitietDuan != null)
            {
                gcSanpham.DataSource = xlDTChitietDuan;
            }
            else
                DevExpress.XtraEditors.XtraMessageBox.Show("Không kết nối được với Server\nVui lòng kiểm tra lại kết nối", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void TaomoiDuan(DateTime xlNgaytaoDA)
        {
            txtMa.EditValue = xgDuanaBLL.Duan_TaomaThang(xlNgaytaoDA);
            txtTen.EditValue = null;
            dtpNgaylap.EditValue = DateTime.Now;
            dtpNgaybatdau.EditValue = DateTime.Now;
            dtpxNgayhoanthanh.EditValue = null;
            dtpNgayhoanthanh.EditValue = null;
            gleMa_NhanvienLap.EditValue = UserStatic.tendn;
            gleMa_NhanvienLam.EditValue = null;
            txtGhichu.EditValue = null;

            LoadChitietDuanNull();
        }

        private void LoadChitietduan(long Id_Duan)
        {
            gcSanpham.DataSource = xgChitietDuanBLL.ChitietDuan_LayTheoId_Duan(Id_Duan);
        }

        private void HienthiThongtinDuan(long xlIdDuan)
        {
            DataTable xlDT = xgDuanaBLL.Duan_LayTheoId(xlIdDuan);
            if (xlDT != null)
            {
                if (xlDT.Rows.Count > 0)
                {
                    xgIdDuan = xlIdDuan;
                    txtMa.EditValue = xlDT.Rows[0]["Ma"].ToString();
                    txtTen.EditValue = xlDT.Rows[0]["Ten"].ToString();
                    dtpNgaylap.EditValue = xlDT.Rows[0]["Ngaylap"].ToDateTime();
                    dtpNgaybatdau.EditValue = xlDT.Rows[0]["Ngaybatdau"].ToDateTime().Date;

                    dtpxNgayhoanthanh.EditValue = xlDT.Rows[0]["xNgayhoanthanh"].ToString().Trim().Equals("") ? null : xlDT.Rows[0]["xNgayhoanthanh"];
                    dtpNgayhoanthanh.EditValue = xlDT.Rows[0]["Ngayhoanthanh"].ToString().Trim().Equals("") ? null : xlDT.Rows[0]["Ngayhoanthanh"];

                    gleMa_NhanvienLap.EditValue = xlDT.Rows[0]["Ma_NhanvienLap"];
                    xgMa_NhanvienLap = gleMa_NhanvienLap.EditValue.ToString();
                    gleMa_NhanvienLam.EditValue = xlDT.Rows[0]["Ma_NhanvienLam"];
                    txtGhichu.EditValue = xlDT.Rows[0]["Ghichu"].ToString();

                    LoadChitietduan(xlIdDuan);
                }
            }
            else DevExpress.XtraEditors.XtraMessageBox.Show("Không kết nối được với Server\nVui lòng kiểm tra lại kết nối", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void LoadDuan()
        {
            Class.gkhtdl63.BLL.DuanBLL xlDuanBLL = new BanHangCshap.Class.gkhtdl63.BLL.DuanBLL();
            DataTable xlDT = xlDuanBLL.Duan_LayDanhsach();
            if (xlDT != null)
            {
                gcDSDuan.DataSource = xlDT;
            }
            else
                DevExpress.XtraEditors.XtraMessageBox.Show("Không kết nối được với Server\nVui lòng kiểm tra lại kết nối", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        /// <summary>
        /// Lấy danh sách các phiên bản của các dòng sản phẩm hiện đang dùng
        /// </summary>
        private void LoadQCBoSanphamHiendung()
        {
            Class.gkhtdl63.BLL.QCBoSanphamBLL xlQCBoSanphamBLL = new BanHangCshap.Class.gkhtdl63.BLL.QCBoSanphamBLL();
            xgDTQCBoSanpham = xlQCBoSanphamBLL.QCBoSanpham_Laydanhsachhiendung();
            if (xgDTQCBoSanpham != null)
            {
                gleMa_QCBoSanpham.DataSource = xgDTQCBoSanpham;
                gleMa_QCBoSanpham.DisplayMember = "Sanpham";
                gleMa_QCBoSanpham.ValueMember = "Ma";
            }
            else
                DevExpress.XtraEditors.XtraMessageBox.Show("Không kết nối được với Server\nVui lòng kiểm tra lại kết nối", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void LoadTho()
        {
            Class.KhachHangNCC clskhncc = new BanHangCshap.Class.KhachHangNCC();
            DataTable xlDT = clskhncc.LoadTho();//clskhncc.layDSKhachHangNCCTheoLoai(1);
            DataRow dr = xlDT.NewRow();
            dr[0] = DBNull.Value;
            dr[1] = DBNull.Value;
            dr[2] = DBNull.Value;
            xlDT.Rows.InsertAt(dr, 0);
            gleMa_Thochinh.Properties.DataSource = xlDT;
            gleMa_NhanvienLam.Properties.DataSource = xlDT;

            gle_DSDuan_NhanvienLam.DataSource = xlDT;
            gle_DSDuan_NhanvienLam.DisplayMember = "khachhangncc";
            gle_DSDuan_NhanvienLam.ValueMember = "tenkhncc";
            //gleMa_Thochinh.EditValue = DBNull.Value;
        }

        private void LoadNhanvien()
        {
            Class.gkhtdl63.BLL.AllInOneBLL xlAllInOneBLL = new BanHangCshap.Class.gkhtdl63.BLL.AllInOneBLL();
            DataTable xlDT = xlAllInOneBLL.Nhanvien_LayDanhsach();
            if (xlDT != null)
            {
                gleMa_NhanvienLap.Properties.DataSource = xlDT;
                DataRow xlNewDR = xlDT.NewRow();
                xlNewDR[0] = "";
                xlNewDR[1] = "";
                xlDT.Rows.InsertAt(xlNewDR, 0);
            }
            else
                DevExpress.XtraEditors.XtraMessageBox.Show("Không kết nối được với Server\nVui lòng kiểm tra lại kết nối", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        /// <summary>
        /// Kiểm tra nhập liệu
        /// </summary>
        /// <returns></returns>
        private bool KiemtraNhaplieu()
        {
            if (txtMa.Text.Trim().Equals(""))
            {
                DevExpress.XtraEditors.XtraMessageBox.Show("Không kết nối được với Server\nVui lòng kiểm tra lại kết nối", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            if (txtTen.Text.Trim().Equals(""))
            {
                DevExpress.XtraEditors.XtraMessageBox.Show("Chưa nhập tên dự án", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtTen.Focus();
                return false;
            }
            if (gleMa_NhanvienLam.EditValue == null)
            {
                DevExpress.XtraEditors.XtraMessageBox.Show("Chưa chọn thợ chiệu trách nhiệm thực hiên dự án", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                gleMa_NhanvienLam.Focus();
                return false;
            }

            if (dtpxNgayhoanthanh.EditValue != null)
            {
                if (DateTime.Compare(dtpxNgayhoanthanh.EditValue.ToDateTime().Date, dtpNgaybatdau.EditValue.ToDateTime().Date) < 0)
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show("NGÀY DỰ KIẾN HOÀN THÀNH không được nhỏ hơn NGÀY BẮT ĐẦU LÀM", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    dtpxNgayhoanthanh.Focus();
                    return false;
                }
            }

            if (dtpNgayhoanthanh.EditValue != null)
            {
                if (DateTime.Compare(dtpNgayhoanthanh.EditValue.ToDateTime().Date, dtpNgaybatdau.EditValue.ToDateTime().Date) < 0)
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show("NGÀY HOÀN THÀNH không được nhỏ hơn NGÀY BẮT ĐẦU LÀM", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    dtpNgayhoanthanh.Focus();
                    return false;
                }
            }

            return true;
        }


        private void TimKiemDuan()
        {
            if (gleMa_Thochinh.EditValue != null)
            {
                if (!gleMa_Thochinh.EditValue.ToString().Equals(""))
                {
                    gcDSDuan.DataSource = xgDuanaBLL.Duan_TimNgayTho(dtpTungay.EditValue.ToDateTime().Date, dtpDenngay.EditValue.ToDateTime().Date, gleMa_Thochinh.EditValue.ToString());
                    return;
                }
            }
            gcDSDuan.DataSource = xgDuanaBLL.Duan_TimNgay(dtpTungay.EditValue.ToDateTime().Date, dtpDenngay.EditValue.ToDateTime().Date);
        }


        private void frmDuan_Load(object sender, EventArgs e)
        {
            dtpTungay.EditValue = SDN.LayNgaydauthang();
            dtpDenngay.EditValue = DateTime.Now;
            LoadTho();
            LoadDuan();
            LoadNhanvien();
            LoadQCBoSanphamHiendung();
        }


        private string xgMa_QCBoSanpham { get; set; }
        //,<Soluong, float,>
        private float xgSoluong { get; set; }
        //,<Ghichu, nvarchar(max),>
        private string xgGhichu { get; set; }

        private float xgDongia { get; set; }
        private float xgThanhtien { get; set; }
        private string xgDVT { get; set; }
        private float xgSoluongDanghiemthu { get; set; }

        private void gvSanpham_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
        {
            try
            {
                DataRow[] xlDRSanpham = xgDTQCBoSanpham.Select(String.Format("Ma ='{0}'", xgMa_QCBoSanpham));
                if (xlDRSanpham.Length > 0)
                {
                    gvSanpham.SetRowCellValue(e.RowHandle, colMa_QCBoSanpham, xgMa_QCBoSanpham);
                }
                gvSanpham.SetRowCellValue(e.RowHandle, colSoluong, xgSoluong);
                gvSanpham.SetRowCellValue(e.RowHandle, colGhichu, xgGhichu);
                gvSanpham.SetRowCellValue(e.RowHandle, colDongia, xgDongia);
                gvSanpham.SetRowCellValue(e.RowHandle, colThanhtien, xgThanhtien);
                gvSanpham.SetRowCellValue(e.RowHandle, colDVT, xgDVT);
                gvSanpham.SetRowCellValue(e.RowHandle, colSoluongDanghiemthu, xgSoluongDanghiemthu);
                gvSanpham.UpdateCurrentRow();
            }
            catch (Exception)
            {
            }
        }

        void gleMa_QCBoSanpham_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            xgMa_QCBoSanpham = "";
            xgSoluong = 0;
            xgGhichu = "";

            try
            {
                DataRow[] xlDT = xgDTQCBoSanpham.Select(String.Format("Ma ='{0}'", e.NewValue.ToString()));
                if (xlDT.Length > 0)
                {
                    if (!e.NewValue.ToString().Equals(""))
                    {
                        xgMa_QCBoSanpham = e.NewValue.ToString();
                        xgSoluong = 1;
                        xgThanhtien = xgDongia = xlDT[0]["Giagoc"].ToFloat();
                        xgDVT = xlDT[0]["DVT"].ToString();
                        xgGhichu = "";
                        xgSoluongDanghiemthu = 0;
                    }
                    try
                    {
                        DataRow xlDR = gvSanpham.GetFocusedDataRow();
                        xgSoluong = xlDR["Soluong"].ToFloat();
                        xgGhichu = xlDR["Ghichu"].ToString();
                        xgSoluongDanghiemthu = xlDR["SoluongDanghiemthu"].ToFloat();
                        xgThanhtien = xgDongia * xgSoluong;
                    }
                    catch (Exception)
                    {
                    }
                    gvSanpham.SetFocusedRowCellValue(colMa_QCBoSanpham, xgMa_QCBoSanpham);
                    gvSanpham.SetFocusedRowCellValue(colDVT, xgDVT);
                    gvSanpham.SetFocusedRowCellValue(colDongia, xgDongia);
                    gvSanpham.SetFocusedRowCellValue(colSoluong, xgSoluong);
                    gvSanpham.SetFocusedRowCellValue(colThanhtien, xgThanhtien);
                    gvSanpham.SetFocusedRowCellValue(colSoluongDanghiemthu, SoluongDanghiemthu);

                    gvSanpham.UpdateCurrentRow();
                }
            }
            catch (Exception)
            {
            }
        }

        private void gvSanpham_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            try
            {
                if (e.Column.Name.Equals("colSoluong"))
                {
                    xgSoluong = e.Value.ToFloat();
                    //float x = gvSanpham.GetFocusedRowCellValue("Dongia").ToFloat();
                    xgThanhtien = gvSanpham.GetFocusedRowCellValue("Gia").ToFloat() * xgSoluong;

                    gvSanpham.SetFocusedRowCellValue(colSoluong, xgSoluong);
                    gvSanpham.SetFocusedRowCellValue(colThanhtien, xgThanhtien);
                }
            }
            catch (Exception)
            {
            }
        }

        private void btnThemduan_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            TaomoiDuan(DateTime.Now);
            xgIsAOrE = true;
        }

        private void dtpNgaylap_EditValueChanged(object sender, EventArgs e)
        {
            if (xgIsAOrE)
            {
                txtMa.EditValue = xgDuanaBLL.Duan_TaomaThang(dtpNgaylap.EditValue.ToDateTime());
            }
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            //Kiểm tra lổi nhập liệu
            if (!KiemtraNhaplieu()) return;

            //Chuẩn bị dữ liệu dự án
            Class.gkhtdl63.DAL.Entities.Duan xlDA = new BanHangCshap.Class.gkhtdl63.DAL.Entities.Duan();

            xlDA.Ma = txtMa.Text;
            xlDA.Ten = txtTen.EditValue.ToString().ToUpperWords();
            xlDA.Ngaylap = dtpNgaylap.EditValue.ToDateTime();

            xlDA.Ngaybatdau = dtpNgaybatdau.EditValue != null ? dtpNgaybatdau.EditValue.ToDateTime() : SqlDateTime.Null;
            xlDA.xNgayhoanthanh = dtpxNgayhoanthanh.EditValue != null ? dtpxNgayhoanthanh.EditValue.ToDateTime().Date : SqlDateTime.Null;
            xlDA.Ngayhoanthanh = dtpNgayhoanthanh.EditValue != null ? dtpNgayhoanthanh.EditValue.ToDateTime().Date : SqlDateTime.Null;

            xlDA.Ma_NhanvienLam = gleMa_NhanvienLam.EditValue.ToString();
            xlDA.Ghichu = txtGhichu.Text.ToUpperFirst();

            //Bắt đầu trans
            DatabaseStatic.sqltrans = DatabaseStatic.conn.BeginTransaction();
            bool xlOki = true;

            //Nếu là thêm
            if (xgIsAOrE)
            {
                xlDA.Ma_NhanvienLap = gleMa_NhanvienLap.EditValue.ToString();
                DataTable KQ = xgDuanaBLL.Duan_Them(xlDA);
                if (KQ != null)
                {
                    xgIdDuan = (long)KQ.Rows[0][0].ToFloat();
                    int xlCount = gvSanpham.RowCount - 1;
                    Class.gkhtdl63.DAL.Entities.ChitietDuan xlCT = new BanHangCshap.Class.gkhtdl63.DAL.Entities.ChitietDuan();
                    for (int i = 0; i < xlCount; i++)
                    {
                        DataRow xlR = gvSanpham.GetDataRow(i);
                        xlCT.Id_Duan = KQ.Rows[0][0].ToFloat().ToInt64();
                        xlCT.STT = i + 1;
                        xlCT.Ma_QCBoSanpham = xlR["Ma_QCBoSanpham"].ToString();
                        xlCT.Soluong = xlR["Soluong"].ToFloat();
                        xlCT.Ghichu = xlR["Ghichu"].ToString();
                        xlCT.DVT = xlR["DVT"].ToString();
                        xlCT.Gia = xlR["Gia"].ToFloat();
                        xlCT.Thanhtien = xlR["Thanhtien"].ToFloat();
                        xlCT.SoluongDanghiemthu = xlR["SoluongDanghiemthu"].ToFloat();
                        if (!xgChitietDuanBLL.ChitietDuan_Them(xlCT))
                        {
                            xlOki = false;
                            break;
                        }
                    }
                }
                else
                {
                    xlOki = false;
                }
            }
            else
            {//sửa thì dớt em này
                xlDA.Ma_NhanvienLap = xgMa_NhanvienLap;
                if (xgChitietDuanBLL.ChitietDuan_Xoa(xgIdDuan))
                {
                    if (xgDuanaBLL.Duan_Capnhat(xlDA, xgIdDuan))
                    {
                        int xlCount = gvSanpham.RowCount - 1;
                        Class.gkhtdl63.DAL.Entities.ChitietDuan xlCT = new BanHangCshap.Class.gkhtdl63.DAL.Entities.ChitietDuan();
                        for (int i = 0; i < xlCount; i++)
                        {
                            DataRow xlR = gvSanpham.GetDataRow(i);
                            xlCT.Id_Duan = xgIdDuan;
                            xlCT.STT = i + 1;
                            xlCT.Ma_QCBoSanpham = xlR["Ma_QCBoSanpham"].ToString();
                            xlCT.Soluong = xlR["Soluong"].ToFloat();
                            xlCT.Ghichu = xlR["Ghichu"].ToString();
                            xlCT.DVT = xlR["DVT"].ToString();
                            xlCT.Gia = xlR["Gia"].ToFloat();
                            xlCT.Thanhtien = xlR["Thanhtien"].ToFloat();
                            xlCT.SoluongDanghiemthu = xlR["SoluongDanghiemthu"].ToFloat();

                            if (xlCT.Soluong < xlCT.SoluongDanghiemthu)
                            {
                                xlOki = false;
                                DevExpress.XtraEditors.XtraMessageBox.Show("Chi tiết dự án này đã được nghiệm thu với số lượng " + xlCT.SoluongDanghiemthu.ToString() + "!\nLớn hơn số lượng chi tiết bạn sửa lại là " + xlCT.Soluong.ToString(), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                break;
                            }
                            if (!xgChitietDuanBLL.ChitietDuan_Them(xlCT))
                            {
                                xlOki = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        xlOki = false;
                    }
                }
                else xlOki = false;
            }

            if (xlOki)
            {
                DatabaseStatic.sqltrans.Commit();
                DevExpress.XtraEditors.XtraMessageBox.Show("Đã lưu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                LoadDuan();
                LoadChitietduan(xgIdDuan);
                xgIsAOrE = false;
            }
            else
            {
                DatabaseStatic.sqltrans.Rollback();
                DevExpress.XtraEditors.XtraMessageBox.Show("Không thê lưu, kiểm tra lại kết nối đến cơ sỡ dữ liệu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnXemchitietDuan_Click(object sender, EventArgs e)
        {
            try
            {
                xgIsAOrE = false;
                xgIdDuan = (long)gvDSDuan.GetFocusedRowCellValue("Id").ToFloat();
                HienthiThongtinDuan(xgIdDuan);
            }
            catch (Exception)
            {
            }
        }

        private void gvDSDuan_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                xgIsAOrE = false;
                xgIdDuan = (long)gvDSDuan.GetFocusedRowCellValue("Id").ToFloat();
                HienthiThongtinDuan(xgIdDuan);
            }
            catch (Exception)
            {
            }
        }

        #region Tìm kiếm dự án
        private void btnXoaChitietDuan_Click(object sender, EventArgs e)
        {
            try
            {
                DataRow xlDR = gvSanpham.GetFocusedDataRow();
                xlDR.Delete();
                gvSanpham.UpdateCurrentRow();
            }
            catch (Exception)
            {
            }
        }

        private void btnXemChitietVattuCaduan_Click(object sender, EventArgs e)
        {
            DanhMuc.gkhtdl63.frmChitietVattuCaduan frm = new frmChitietVattuCaduan(xgIdDuan);
            frm.ShowDialog();
        }

        private void btnDSXemChitietVattuDuan_Click(object sender, EventArgs e)
        {
            try
            {
                DanhMuc.gkhtdl63.frmChitietVattuCaduan frm = new frmChitietVattuCaduan((long)gvDSDuan.GetFocusedRowCellValue("Id").ToFloat());
                frm.ShowDialog();
            }
            catch (Exception)
            {
            }
        }

        private void gleMa_Thochinh_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index == 1)
            {
                TimKiemDuan();
            }
        }

        private void gleMa_Thochinh_EditValueChanged(object sender, EventArgs e)
        {
            TimKiemDuan();
        }
        #endregion

        #region Làm mướt chuột
        private void gvThochinh_MouseWheel(object sender, MouseEventArgs e)
        {
            gvThochinh.GridMouseWheel(e);
        }

        private void gvThochinhTim_MouseWheel(object sender, MouseEventArgs e)
        {
            gvThochinhTim.GridMouseWheel(e);
        }

        private void gvQCBoSanphamHiendung_MouseWheel(object sender, MouseEventArgs e)
        {
            gvQCBoSanphamHiendung.GridMouseWheel(e);
        }
        #endregion

        private void btnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #region IN ẤN
        private void InA4(bool xlInChitietOrTonghop)
        {
            WaitDialogForm xlDG = new WaitDialogForm("Đang load dữ liệu...", "Xin chờ trong giây lát.");
            Report.gkhtdl63.frmMainRPTS frm = new BanHangCshap.Report.gkhtdl63.frmMainRPTS();

            if (xlInChitietOrTonghop)
            {
                Report.gkhtdl63.MyRPT.Duan.rptInDuanA4 rpt = new BanHangCshap.Report.gkhtdl63.MyRPT.Duan.rptInDuanA4();
                rpt.DataSource = xgDuanaBLL.Duan_LayChitietVattu(xgIdDuan);
                frm.SetReport(rpt);
            }
            else
            {
                Report.gkhtdl63.MyRPT.Duan.rptDuan_XemtonghopVattu rpt = new BanHangCshap.Report.gkhtdl63.MyRPT.Duan.rptDuan_XemtonghopVattu();
                rpt.DataSource = xgDuanaBLL.Duan_LayTonghopVattu(xgIdDuan);
                frm.SetReport(rpt);
            }

            xlDG.Close();
            frm.ShowDialog();
        }


        private void InA5(bool xlInChitietOrTonghop)
        {
            WaitDialogForm xlDG = new WaitDialogForm("Đang load dữ liệu...", "Xin chờ trong giây lát.");
            Report.gkhtdl63.frmMainRPTS frm = new BanHangCshap.Report.gkhtdl63.frmMainRPTS();

            if (xlInChitietOrTonghop)
            {
                //Report.gkhtdl63.MyRPT.Duan.rptInDuanA4 rpt = new BanHangCshap.Report.gkhtdl63.MyRPT.Duan.rptInDuanA4();
                //rpt.DataSource = xgDuanaBLL.Duan_LayChitietVattu(xgIdDuan);
                //frm.SetReport(rpt);
            }
            else
            {
                Report.gkhtdl63.MyRPT.Duan.rptDuan_XemtonghopVattuA5 rpt = new BanHangCshap.Report.gkhtdl63.MyRPT.Duan.rptDuan_XemtonghopVattuA5();
                rpt.DataSource = xgDuanaBLL.Duan_LayTonghopVattu(xgIdDuan);
                frm.SetReport(rpt);
            }

            xlDG.Close();
            frm.ShowDialog();
        }
        #endregion

        private void btnInChitietDuan_Click(object sender, EventArgs e)
        {
            InA4(true);
        }

        private void btnInChitietDuan_ArrowButtonClick(object sender, EventArgs e)
        {
            cmt_btnInChitietDuan.Show(btnInChitietDuan, btnInChitietDuan.Width - 18, btnInChitietDuan.Height);
        }

        private void btnInChitietDuanA4_Click(object sender, EventArgs e)
        {
            InA4(true);
        }

        private void btnInChitietDuanA5_Click(object sender, EventArgs e)
        {

        }

        private void btnInTonghopVatu_Click(object sender, EventArgs e)
        {
            InA4(false);
        }

        private void btnInTonghopVatu_ArrowButtonClick(object sender, EventArgs e)
        {
            cmt_btnInTonghopVatu.Show(btnInTonghopVatu, btnInTonghopVatu.Width - 18, btnInTonghopVatu.Height);
        }

        private void btnInTonghopVatuA4_Click(object sender, EventArgs e)
        {
            InA4(false);
        }

        private void btnInTonghopVatuA5_Click(object sender, EventArgs e)
        {
            InA5(false);
        }

        private void hideContainerLeft_Click(object sender, EventArgs e)
        {

        }

        [DllImport("user32.dll")]
        public static extern bool GetCursorPos(out Point pt);

        System.Drawing.Point p;

        decimal Soluong = 0;
        decimal SoluongDanghiemthu = 0;
        private void btnNghiemthuMotphan_Click(object sender, EventArgs e)
        {//Ma_QCBoSanpham
            GetCursorPos(out p);
            Soluong = gvSanpham.GetFocusedRowCellValue("Soluong").ToDecimal();
            SoluongDanghiemthu = gvSanpham.GetFocusedRowCellValue("SoluongDanghiemthu").ToDecimal();
            DanhMuc.gkhtdl63.Nghiemthu.frmSoluongNhiemthu frm = new BanHangCshap.DanhMuc.gkhtdl63.Nghiemthu.frmSoluongNhiemthu(p.X, p.Y, gvSanpham.GetFocusedRowCellValue("Ma_QCBoSanpham").ToString(), (long)gvSanpham.GetFocusedRowCellValue("Id").ToFloat(), Soluong, SoluongDanghiemthu);
            frm.Tailai += new MyEvent_LoadData(frm_Tailai);
            frm.Show();
        }

        void frm_Tailai(object sender, ELoadData e)
        {
            gvSanpham.SetFocusedRowCellValue(colSoluongDanghiemthu, SoluongDanghiemthu + e.Data.ToDecimal());
            gvSanpham.UpdateCurrentRow();
            LoadDuan();
        }

        private void btnThemNV_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            frmChiTietKhachHangNCC frm = new frmChiTietKhachHangNCC();
            frm.loainhomkhncc = 1;
            frm.loaikhncc = 1;
            //frm.getDataTable = new frmChiTietKhachHangNCC.GetDataTable(loadKhachHang);
            frm.ShowDialog();
        }

        private void gleMa_NhanvienLam_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index == 1)
            {
                LoadTho();
            }
        }

        private void btnNghiemthuDuan_Click(object sender, EventArgs e)
        {
            DanhMuc.gkhtdl63.Nghiemthu.frmNgayNghiemthu frm = new BanHangCshap.DanhMuc.gkhtdl63.Nghiemthu.frmNgayNghiemthu(dtpNgaybatdau.EditValue);
            frm.Capnhat += new MyEvent_LoadData(frm_Capnhat);
            frm.ShowDialog();
        }

        void frm_Capnhat(object sender, ELoadData e)
        {
            Class.gkhtdl63.BLL.QCBoSanphamBLL xlQCBoSanphamBLL = new BanHangCshap.Class.gkhtdl63.BLL.QCBoSanphamBLL();
            if (e.IsLoadData)
            {
                Class.gkhtdl63.BLL.ChitietDuanBLL xlChitietDuanBLL = new BanHangCshap.Class.gkhtdl63.BLL.ChitietDuanBLL();

                //Bắt đầu trans
                DatabaseStatic.sqltrans = DatabaseStatic.conn.BeginTransaction();
                bool xlOki = true;

                int xlCount = gvSanpham.RowCount - 1;
                for (int i = 0; i < xlCount; i++)
                {
                    decimal sl = gvSanpham.GetRowCellValue(i, "Soluong").ToDecimal();
                    decimal sld = gvSanpham.GetRowCellValue(i, "SoluongDanghiemthu").ToDecimal();
                    float x = (sl - sld).ToFloat();
                    if (xlChitietDuanBLL.ChitietDuan_CapnhatSoluongDanghiemthu((long)gvSanpham.GetRowCellValue(i, "Id").ToFloat(), x))
                    {
                        if (!xlQCBoSanphamBLL.QCBoSanPham_CapnhatSoluong(x, gvSanpham.GetRowCellValue(i, "Ma_QCBoSanpham").ToString()))
                        {
                            xlOki = false;
                            break;
                        }
                    }
                    else
                    {
                        xlOki = false;
                        break;
                    }
                }

                if (!xgDuanaBLL.Duan_Capnhat_Ngayhoanthanh(xgIdDuan, e.Data))
                {
                    xlOki = false;
                }

                if (xlOki)
                {
                    DatabaseStatic.sqltrans.Commit();
                    UltitityStatic.thongBaoThanhCong("Đã nghiệm thu thành công.");
                    LoadDuan();
                    LoadChitietduan(xgIdDuan);
                    dtpNgayhoanthanh.EditValue = e.Data;
                }
                else
                {
                    DatabaseStatic.sqltrans.Rollback();
                    UltitityStatic.thongBaoLoi("Không thể nghiệm thu. Xin kiểm tra lại kết nối đến SERVER.");
                }
            }
        }

        private void btnXoaDuan_Click(object sender, EventArgs e)
        {
            try
            {
                if (DevExpress.XtraEditors.XtraMessageBox.Show("Bạn có chắc muốn xóa phiếu này không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (xgDuanaBLL.Duan_Xoa((long)gvDSDuan.GetFocusedRowCellValue("Id").ToFloat()))
                    {
                        LoadDuan();
                    }
                    else
                    {
                        DevExpress.XtraEditors.XtraMessageBox.Show("Dữ liệu đang được sử dụng nên không thể xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
            catch (Exception)
            {
            }
        }
    }
}
